import echarts from 'echarts'
const debounce = require('lodash/debounce')

export default {
  data () {
    return {
      $_sidebarElm: null,
      $_resizeHandler: null
    }
  },
  mounted () {
    this.initListener()
  },
  activated () {
    if (!this.$_resizeHandler) {
      // avoid duplication init
      this.initListener()
    }

    // when keep-alive chart activated, auto resize
    this.resize()
  },
  beforeDestroy () {
    this.destroyListener()
  },
  deactivated () {
    this.destroyListener()
  },
  methods: {
    $_sidebarResizeHandler (e) {
      if (e.propertyName === 'width') {
        this.$_resizeHandler()
      }
    },
    initListener () {
      this.$_resizeHandler = debounce(() => {
        this.resize()
      }, 100)
      window.addEventListener('resize', this.$_resizeHandler)

      this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
      this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
    },
    destroyListener () {
      window.removeEventListener('resize', this.$_resizeHandler)
      this.$_resizeHandler = null

      this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
    },
    resize () {
      const {
        chart,
        $el = {}
      } = this

      if (chart) {
        chart.resize ? chart.resize() : chart.reflow && chart.reflow()
      } else {
        const { id } = $el
        if (id) {
          const chartEl = echarts.init(document.getElementById(id).querySelector('.chart'))
          chartEl.resize()
        }
      }
    }
  }
}
